#include "ScnsTm1638.c.h"

#if defined(SCNS_TM1638_ENABLE)&&SCNS_TM1638_ENABLE==1

const ScnsBspTm1638Config scnsBspTm1638Config[SCNS_TM1638_MAX]={
    {
        .tab=NULL,
#if defined(SCNS_KEY_ENABLE)&&SCNS_KEY_ENABLE==1
        .key={
            SCNS_KEY_K1,
            SCNS_KEY_K2,
            SCNS_KEY_K3,
            SCNS_KEY_K4,
            SCNS_KEY_K5,
            SCNS_KEY_K6,
            SCNS_KEY_K7,
            SCNS_KEY_K8,
            SCNS_KEY_K9,
            SCNS_KEY_K10,
            SCNS_KEY_K11,
            SCNS_KEY_K12,
            SCNS_KEY_K13,
            SCNS_KEY_K14,
            SCNS_KEY_K15,
            SCNS_KEY_K16,
        },
#endif
    }
};

static const struct
{
    gpio_pin_enum dio;
    gpio_pin_enum clk;
    gpio_pin_enum stb;
}ptx[SCNS_TM1638_MAX]={
    {.dio=A1,.clk=A0,.stb=A2},
};

ScnsStatus scnsBspTm1638Init(ScnsTm1638Enum tm1N)
{
    gpio_init(ptx[tm1N].dio,GPO,1,GPO_PUSH_PULL);
    gpio_init(ptx[tm1N].clk,GPO,1,GPO_PUSH_PULL);
    gpio_init(ptx[tm1N].stb,GPO,1,GPO_PUSH_PULL);
    return SCNS_STATUS_OK;
}

ScnsStatus scnsBspTm1638PostInit(ScnsTm1638Enum tm1N)
{
    return SCNS_STATUS_OK;
}

void scnsBspTm1638SetDioDir(ScnsTm1638Enum tm1N,uint8 in)
{
    gpio_set_dir(ptx[tm1N].dio,(in)?GPI:GPO,(in)?GPI_PULL_UP:GPO_PUSH_PULL);
}

void scnsBspTm1638SetDio(ScnsTm1638Enum tm1N,uint8 dat)
{
    gpio_set_level(ptx[tm1N].dio,dat);
}

uint8 scnsBspTm1638GetDio(ScnsTm1638Enum tm1N)
{
    return gpio_get_level(ptx[tm1N].dio);
}

void scnsBspTm1638SetClk(ScnsTm1638Enum tm1N,uint8 dat)
{
    gpio_set_level(ptx[tm1N].clk,dat);
}

void scnsBspTm1638SetStb(ScnsTm1638Enum tm1N,uint8 dat)
{
    gpio_set_level(ptx[tm1N].stb,dat);
}

#endif
